"""
1. 请求TPshop项目的登录接口，
请求数据（username: username, password: 123456, verify_code: 1234）
2. 登录接口URL：http://localhost/index.php?m=Home&c=User&a=do_login
"""
import urllib
from importlib.metadata import files

import requests

# 发送请求
login_url = 'http://localhost/index.php?m=Home&c=User&a=do_login'
login_data = {'username': 'username',
              'password': '123456',
              'verify_code': '8888'}
# login_data = {
#     'mobile': '13200000000',
#     'password': '<PASSWORD>',
# }

# # 文件上传
# files = {"files": open("data.txt", "rb")}
# requests.post(login_url, files=files)

response = requests.post(login_url, data=login_data) # 提交表单 常见用于HTML表单提交
# response = requests.post(url=login_url, json=login_data) # Json格式 REST API交互

# 看响应
print(response.json())

# post请求:支持表单提交→data
#             JSON数据→ json
#             文件上传→ files

"""
 1. 访问TPshop搜索商品的接口，通过查询字符串的方式传递搜索的关键字 iPhone ，并查看响应数据 

2. 请求路径格式为: http://localhost/Home/Goods/search.html?q=iPhone
"""

# 1.直接拼接字符串 适合参数简单且固定手动拼接，需要手动处理URL编码如空格特殊字符
# url = 'http://localhost/Home/Goods/search.html?q=iPhone'
# response = requests.get(url)
# 2.使用params字典 requests会帮忙编码参数并拼接到URL，可以嵌套字典和列表
# params = {
#     'q': 'iPhone'
# }
# response = requests.get('http://localhost/Home/Goods/search.html', params=params)

# get请求参数必须暴露在URL，因为get请求的规范就是通过URL传递所有参数，适合像搜索商品，百度查询这种场景
# post请求敏感数据(用户名，密码)通过请求体BODY传递，不会暴露在URL中，URL中的是路由参数告诉服务器调用哪个控制器和方法
# post请求适用场景:用户登录涉及到敏感操作需要保护数据
# 永远不要使用GET请求传递密码/token等敏感信息url可能会被浏览器历史记录或者日志保存
# 对修改服务器状态的操作比如像登录/支付必须用post

# put:修改资源
# deleteL:删除资源
# head:响应数据中只包含请求头，前提是项目中已实现该功能
# options:查看接口支持的请求方法，前提是项目中已实现该功能

# 用于断言的响应内容解析
# response.status_code:响应状态码
# response.url:url地址信息
# response.encoding:查看响应数据编码格式
# response.text:文本形式查看响应数据
# response.headers:查看头部信息
# response.cookies:查看cookies信息
# response.content:字节码形式查看响应数据
# response.json():json形式查看响应数据

"""
1). 访问百度首页的接口`http://www.baidu.com`，获取以下响应数据 
2). 获取响应状态码
3). 获取请求URL
4). 获取响应字符编码
5). 获取响应头数据
6). 获取响应的cookie数据 7). 获取文本形式的响应内容 8). 获取字节形式的响应内容
"""

# 1). 访问百度首页的接口`http://www.baidu.com`，获取以下响应数据
# response = requests.get('http://www.baidu.com')
# 2). 获取响应状态码
# print(response.status_code)
# 3). 获取请求URL
# print(response.url)
# 4). 获取响应字符编码
# print(response.encoding)
# 5). 获取响应头数据
# print(response.hearders)
# 6). 获取响应的cookie数据
# print(response.cookies)
# 7). 获取文本形式的响应内容
# print(response.text)
# 8). 获取字节形式的响应内容
# print(response.content.decode('utf-8'))


"""
1. 请求IHRM项目的登录接口，URL： http://ip:端口/api/sys/login
2. 请求头： Content-Type: application/json
3. 请求体： {"mobile":"13800000002", "password":"123456"}
"""

login_url = 'http://ip:端口/api/sys/login'
login_headers = {
    'Content-Type': 'application/json'
}
login_data = {
    'mobile': '13800000002',
    'password': '123456'
}
response = requests.post(login_url, data=login_data, headers=login_headers)
print(response.json())

"""
案例:解决tpshop登录验证码问题 
1. 使用requests库调用TPshop登录功能的相关接口，完成登录操作 
2. 登录成功后获取‘我的订单’页面的数据
接口地址:
获取验证码:http://localhost/index.php?m=Home&c=User&a=verify 
登录用户:(username: 13088888888, password: 123456, verify_code: 1234)
登录:http://localhost/index.php?m=Home&c=User&a=do_login 
我的订单:http://localhost/Home/Order/order_list.html
"""

# 获取验证码
response = requests.get('http://localhost/index.php?m=Home&c=User&a=verify')
print(response.cookies)
# PHPSESSID一个由 PHP 自动生成的唯一字符串,相当于用户的「临时身份证」，服务器通过它找到该用户对应的会话数据（Session Data）
# 生命周期：默认在浏览器关闭后失效（或根据服务器配置过期）
# 因为HTTP 协议本身不记录用户状态，导致服务器无法区分多次请求是否来自同一用户。
# 解决方案：通过 PHPSESSID 关联会话。
PHPSESSID = response.cookies.get('PHPSESSID')
print(PHPSESSID)

# 登录
login_url = 'http://localhost/index.php?m=Home&c=User&a=do_login'
login_data = {'username': 13088888888,
              'password': '123456',
              'verify_code': '1234'}
cookies = {
    'PHPSESSID': PHPSESSID}
response = requests.post(login_url, data=login_data, cookies=cookies)
print(response.json())

response = requests.get('http://localhost/Home/Order/order_list.html', cookies=cookies)
print(response.json())

"""
设置session
作用:
在多个请求之间存储数据并自动添加数据，如cookies 
使用:
实例化: session = requests.Session() 
发送请求:
        request.get() ==> session.get() 
        
1. 使用requests库调用TPshop登录功能的相关接口，完成登录操作 
2. 登录成功后获取‘我的订单’页面的数据
接口地址:
获取验证码:http://localhost/index.php?m=Home&c=User&a=verify 
登录用户:(username: 13088888888, password: 123456, verify_code: 1234)
登录:http://localhost/index.php?m=Home&c=User&a=do_login 
我的订单:http://localhost/Home/Order/order_list.html
"""

# 创建session对象
session = requests.Session()

# 获取验证码
response = session.get('http://localhost/index.php?m=Home&c=User&a=verify')

# 登录
login_url = 'http://localhost/index.php?m=Home&c=User&a=do_login'
login_data = {'username': 1308888888,
              'password': '123456',
              'verify_code': '1234'}
response = session.post(login_url, data=login_data, cookies=cookies)
print(response.json())

response = session.get('http://localhost/Home/Order/order_list.html', cookies=cookies)
print(response.text)